home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / TDMouse-1.1os.lha / TDMouse / ev.c < prev    next >
C/C++ Source or Header  |  2000-10-06  |  2KB  |  110 lines

  1. struct IOStdReq *io;
  2. APTR port;
  3. LONG dev=-1;
  4. struct Interrupt it;
  5. struct InputEvent *e0,*e1;
  6. LONG Sig;
  7. ULONG SignalMask;
  8. APTR MainTask;
  9.  
  10. extern APTR UserRoutine;
  11.  
  12. int i,j,k;
  13.  
  14. main()
  15. {
  16.  ULONG co;
  17.  UBYTE *a,*b,*c,*d;
  18.  
  19.  port=CreatePort(0,0);
  20.  io=CreateExtIO(port,1024);
  21.  dev=OpenDevice("input.device",0,io,0);
  22.  e0=AllocMem(200,MEMF_CLEAR|MEMF_PUBLIC);
  23.  e1=AllocMem(200,MEMF_CLEAR|MEMF_PUBLIC);
  24.  if(dev!=0) { puts("Error!"); exit(0); }
  25.  Sig=AllocSignal(-1L);
  26.  SignalMask=(1L<<Sig);
  27.  MainTask=FindTask(NULL);
  28.  
  29.  it.is_Data=NULL;
  30.  it.is_Code=&UserRoutine;
  31.  it.is_Node.ln_Succ=NULL;
  32.  it.is_Node.ln_Pred=NULL;
  33.  it.is_Node.ln_Type=NT_INTERRUPT;
  34.  it.is_Node.ln_Name="test.interrupt";
  35.  it.is_Node.ln_Pri=51;
  36.  io->io_Data=⁢
  37.  io->io_Length=sizeof(struct Interrupt);
  38.  io->io_Command=IND_ADDHANDLER;
  39.  puts("init...");
  40.  DoIO(io);
  41.  puts("ok!");
  42.  
  43.  for(;;)
  44.   {
  45.    Wait(SignalMask);
  46.    Disable();
  47.    CopyMem(e0,e1,sizeof(struct InputEvent));
  48.    Enable();
  49.  
  50.    co=0;
  51.    co=e1->ie_Qualifier;
  52.    a=b=c=d=" ";
  53.  
  54.    if(co & IEQUALIFIER_LEFTBUTTON) a="L";
  55.    if(co & IEQUALIFIER_RBUTTON) b="R";
  56.    if(e1->ie_Class==IECLASS_RAWKEY) c="Rawkey";
  57.    else if(e1->ie_Class==IECLASS_RAWMOUSE) c="RMouse";
  58. /*
  59.    printf("%s %s %s\n",c,a,b);
  60. */
  61.  
  62.    printf("%2lx %2lx  C=%4lx  Q=%4lx   %4ld %4ld   %lx\n",
  63.    e0->ie_Class,
  64.    e0->ie_SubClass,
  65.    e0->ie_Code,
  66.    e0->ie_Qualifier,
  67.    e0->ie_X,e0->ie_Y,e0->ie_NextEvent);
  68.  
  69. /*
  70.    printf("%02lx  X=%ld Y=%ld  %ld  %s %s %s %s\n",e1->ie_Class,e1->ie_X,e1->ie_Y,co,a,b,c,d);
  71. */
  72.   }
  73.  
  74. /*
  75.  CloseDevice(io);
  76.  DeleteExtIO(io);
  77.  DeletePort(port);
  78.  exit(0);
  79. */
  80. }
  81.  
  82. #asm
  83.    public _geta4
  84.    public _UserRoutine
  85. _UserRoutine:
  86.    movem.l a0-a6/d0-d7,-(sp)
  87.    jsr _geta4
  88.    move.l a0,-(sp)
  89.    jsr _CRoutine
  90.    addq.w #4,sp
  91.    movem.l (sp)+,a0-a6/d0-d7
  92.    rts
  93. #endasm
  94.  
  95. void CRoutine(ev)
  96.  struct InputEvent *ev;
  97. {
  98.  if(ev->ie_Class!=IECLASS_RAWMOUSE)
  99.    if(ev->ie_Class!=IECLASS_POINTERPOS)
  100.      if(ev->ie_Class!=IECLASS_RAWKEY)
  101.        return;
  102.  CopyMem(ev,e0,sizeof(struct InputEvent));
  103. /*
  104.  ev->ie_X=(WORD)(-(WORD)ev->ie_X);
  105.  ev->ie_Y=(WORD)(-(WORD)ev->ie_Y);
  106. */
  107.  Signal(MainTask,SignalMask);
  108. }
  109.  
  110.